package pe.com.cotelasa.scp.dominio.servicio.impl;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import pe.com.cotelasa.common.dao.excepcion.DAOException;
import pe.com.cotelasa.scp.dao.IDAOTipoCambio;
import pe.com.cotelasa.scp.dominio.service.IServicioTipoCambio;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.dominio.common.ESTADO_RESULTADO;
import pe.com.cotelasa.scp.dominio.common.ResultadoServicio;
import pe.com.cotelasa.scp.dominio.common.ResultadoValidacion;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.entidad.TipoCambio;

/**
 * @author zer0
 */
@Service
public class ServicioTipoCambioImpl implements IServicioTipoCambio, Serializable {

    private static final long serialVersionUID = -3899534497036526573L;
    @Inject
    private IDAOTipoCambio daoTipoCambio;

    @Override
    public Collection<TipoCambio> listarTipoCambiosActivos() throws ServiceException {
        try {
            return daoTipoCambio.listarActivos(TipoCambio.class);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Collection<TipoCambio> listarTodosTipoCambios() throws ServiceException {
        try {
            return daoTipoCambio.listarTodos(TipoCambio.class);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public ResultadoValidacion validarTipoCambio(TipoCambio tipoCambio) throws ServiceException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public ResultadoServicio guardarTipoCambio(TipoCambio tipoCambio) throws ServiceException {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            tipoCambio.setEstadoRegistro(ESTADO_REGISTRO.ACTIVO.getValor());
            daoTipoCambio.insertar(tipoCambio);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
        return resultadoServicio;
    }

    @Override
    public TipoCambio conseguirTipoCambioPorId(Integer idTipoCambio) throws ServiceException {
        try {
            return daoTipoCambio.obtenerEntidadPorId(TipoCambio.class, idTipoCambio);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public ResultadoServicio actualizarTipoCambio(TipoCambio tipoCambio) throws ServiceException {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            daoTipoCambio.actualizar(tipoCambio);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
        return resultadoServicio;
    }

    @Override
    public Collection<TipoCambio> listarTipoCambiosPorFiltro(Date fechaInicio, Date fechaFinal) throws ServiceException {
        try {
            //if (tipoCambio.getFecCreacion() != null) {
            //return daoTipoCambio.listarTipoCambiosPorFiltro(fechaInicio,fechaFinal);
            //}else{
            //
            //}
            if (fechaInicio == null && fechaFinal == null) {
                return daoTipoCambio.listarActivos(TipoCambio.class);
            } else if (fechaInicio == null) {
                return daoTipoCambio.listarTipoCambiosPorFiltro(fechaInicio, fechaFinal);
            } else if (fechaFinal == null) {
                return daoTipoCambio.listarTipoCambiosPorFiltro(fechaInicio, fechaFinal);
            } else {
                return daoTipoCambio.listarTipoCambiosPorFiltro(fechaInicio, fechaFinal);
            }

        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public TipoCambio ValidarTipoCambio(TipoCambio tipoCambio) throws ServiceException {
        try {

            return daoTipoCambio.ValidarTipoCambio(tipoCambio);

        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
}
